Project Groups¶
Group 1: Aidan Matunis, Brent Schlegel, Nishtha Trivedi (December 5)¶
Group 2: Dhiraj Veedu, Gavin Treadway, Omer Bashir (December 5)¶
Group 3: Courtney Charlseworth, Elizabeth Gilfeather, Jennifer Rakowski (December 5)¶
Group 4: Blake D, David Antolick, Jacob Antonello (December 5)¶
Group 5: Eeshrita Jog, Jason Yeung, Tianyuzhou Liang (December 10)¶
Group 6: Dmytro Klitchyk, Gouthamrajan Nadarajan (December 10)¶
Group 7: Yao Wang, Kexin Sun (December 10)¶
Group 8: Jessie Weng and Yirun Chen (December 10)¶
Group 9: Murray White (December 10)¶
Project presentations¶
Present a biology/medicine themed paper that incorporates 'substantial' python implementation.¶
Dates: December 5 and December 10¶
Papers can be from diverse areas of computational biology and medicine including but not limited to: systems biology, bioinformatics, computational structural biology, computational medicine, evolution, bioimaging, etc.
Details
- You can work in groups of no more than 3 people.
- All three group members will be required to present.
- The presentation should be 12 mins + 3 mins questions.
- The presentation should include:
- What the paper is about.
- A clear description of the python based coding done in the paper (including any packages you found interesting).
- How that work helped the authors achieve the results they presented in the paper
OMET Teaching Survey¶
Please fill out.
Convolutional Layers¶
For images, each pixel is an input feature. Each hidden layer is a set of feature maps.
Pooling¶
Pooling layers apply a fixed convolution (usually the non-linear MAX kernel). The kernel is usually applied with a stride to reduce the size of the layer.
- faster to train
- fewer parameters to fit
- less sensitive to small changes (MAX)
The last features maps are typically connected to one or more fully-connected layers to produce the desired output.
Consider an input image with 100 pixels. In a classic neural network, we hook these pixels up to a hidden layer with 10 nodes. In a CNN, we hook these pixels up to a convolutional layer with a 3x3 kernel and 10 output feature maps.
Question: "Which network has more parameters to learn?",¶
- Classic
- CNN
Let us CNN to classify cats and dogs¶
We will use Resnet50 neural architecture¶
from tensorflow.keras import applications
img_height, img_width = 256, 256
base_model = applications.ResNet50(weights='imagenet',
include_top=False, input_shape=(img_height, img_width, 3))
len(base_model.layers)
175
base_model.summary()
Model: "resnet50"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ Connected to ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │ input_layer_11 (InputLayer) │ (None, 256, 256, 3) │ 0 │ - │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv1_pad (ZeroPadding2D) │ (None, 262, 262, 3) │ 0 │ input_layer_11[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv1_conv (Conv2D) │ (None, 128, 128, 64) │ 9,472 │ conv1_pad[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv1_bn (BatchNormalization) │ (None, 128, 128, 64) │ 256 │ conv1_conv[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv1_relu (Activation) │ (None, 128, 128, 64) │ 0 │ conv1_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ pool1_pad (ZeroPadding2D) │ (None, 130, 130, 64) │ 0 │ conv1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ pool1_pool (MaxPooling2D) │ (None, 64, 64, 64) │ 0 │ pool1_pad[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_1_conv (Conv2D) │ (None, 64, 64, 64) │ 4,160 │ pool1_pool[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_1_bn │ (None, 64, 64, 64) │ 256 │ conv2_block1_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_1_relu │ (None, 64, 64, 64) │ 0 │ conv2_block1_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_2_conv (Conv2D) │ (None, 64, 64, 64) │ 36,928 │ conv2_block1_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_2_bn │ (None, 64, 64, 64) │ 256 │ conv2_block1_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_2_relu │ (None, 64, 64, 64) │ 0 │ conv2_block1_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_0_conv (Conv2D) │ (None, 64, 64, 256) │ 16,640 │ pool1_pool[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_3_conv (Conv2D) │ (None, 64, 64, 256) │ 16,640 │ conv2_block1_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_0_bn │ (None, 64, 64, 256) │ 1,024 │ conv2_block1_0_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_3_bn │ (None, 64, 64, 256) │ 1,024 │ conv2_block1_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_add (Add) │ (None, 64, 64, 256) │ 0 │ conv2_block1_0_bn[0][0], │ │ │ │ │ conv2_block1_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block1_out (Activation) │ (None, 64, 64, 256) │ 0 │ conv2_block1_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_1_conv (Conv2D) │ (None, 64, 64, 64) │ 16,448 │ conv2_block1_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_1_bn │ (None, 64, 64, 64) │ 256 │ conv2_block2_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_1_relu │ (None, 64, 64, 64) │ 0 │ conv2_block2_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_2_conv (Conv2D) │ (None, 64, 64, 64) │ 36,928 │ conv2_block2_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_2_bn │ (None, 64, 64, 64) │ 256 │ conv2_block2_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_2_relu │ (None, 64, 64, 64) │ 0 │ conv2_block2_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_3_conv (Conv2D) │ (None, 64, 64, 256) │ 16,640 │ conv2_block2_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_3_bn │ (None, 64, 64, 256) │ 1,024 │ conv2_block2_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_add (Add) │ (None, 64, 64, 256) │ 0 │ conv2_block1_out[0][0], │ │ │ │ │ conv2_block2_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block2_out (Activation) │ (None, 64, 64, 256) │ 0 │ conv2_block2_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_1_conv (Conv2D) │ (None, 64, 64, 64) │ 16,448 │ conv2_block2_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_1_bn │ (None, 64, 64, 64) │ 256 │ conv2_block3_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_1_relu │ (None, 64, 64, 64) │ 0 │ conv2_block3_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_2_conv (Conv2D) │ (None, 64, 64, 64) │ 36,928 │ conv2_block3_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_2_bn │ (None, 64, 64, 64) │ 256 │ conv2_block3_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_2_relu │ (None, 64, 64, 64) │ 0 │ conv2_block3_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_3_conv (Conv2D) │ (None, 64, 64, 256) │ 16,640 │ conv2_block3_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_3_bn │ (None, 64, 64, 256) │ 1,024 │ conv2_block3_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_add (Add) │ (None, 64, 64, 256) │ 0 │ conv2_block2_out[0][0], │ │ │ │ │ conv2_block3_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv2_block3_out (Activation) │ (None, 64, 64, 256) │ 0 │ conv2_block3_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_1_conv (Conv2D) │ (None, 32, 32, 128) │ 32,896 │ conv2_block3_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_1_bn │ (None, 32, 32, 128) │ 512 │ conv3_block1_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_1_relu │ (None, 32, 32, 128) │ 0 │ conv3_block1_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_2_conv (Conv2D) │ (None, 32, 32, 128) │ 147,584 │ conv3_block1_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_2_bn │ (None, 32, 32, 128) │ 512 │ conv3_block1_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_2_relu │ (None, 32, 32, 128) │ 0 │ conv3_block1_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_0_conv (Conv2D) │ (None, 32, 32, 512) │ 131,584 │ conv2_block3_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_3_conv (Conv2D) │ (None, 32, 32, 512) │ 66,048 │ conv3_block1_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_0_bn │ (None, 32, 32, 512) │ 2,048 │ conv3_block1_0_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_3_bn │ (None, 32, 32, 512) │ 2,048 │ conv3_block1_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_add (Add) │ (None, 32, 32, 512) │ 0 │ conv3_block1_0_bn[0][0], │ │ │ │ │ conv3_block1_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block1_out (Activation) │ (None, 32, 32, 512) │ 0 │ conv3_block1_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_1_conv (Conv2D) │ (None, 32, 32, 128) │ 65,664 │ conv3_block1_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_1_bn │ (None, 32, 32, 128) │ 512 │ conv3_block2_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_1_relu │ (None, 32, 32, 128) │ 0 │ conv3_block2_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_2_conv (Conv2D) │ (None, 32, 32, 128) │ 147,584 │ conv3_block2_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_2_bn │ (None, 32, 32, 128) │ 512 │ conv3_block2_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_2_relu │ (None, 32, 32, 128) │ 0 │ conv3_block2_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_3_conv (Conv2D) │ (None, 32, 32, 512) │ 66,048 │ conv3_block2_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_3_bn │ (None, 32, 32, 512) │ 2,048 │ conv3_block2_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_add (Add) │ (None, 32, 32, 512) │ 0 │ conv3_block1_out[0][0], │ │ │ │ │ conv3_block2_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block2_out (Activation) │ (None, 32, 32, 512) │ 0 │ conv3_block2_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_1_conv (Conv2D) │ (None, 32, 32, 128) │ 65,664 │ conv3_block2_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_1_bn │ (None, 32, 32, 128) │ 512 │ conv3_block3_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_1_relu │ (None, 32, 32, 128) │ 0 │ conv3_block3_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_2_conv (Conv2D) │ (None, 32, 32, 128) │ 147,584 │ conv3_block3_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_2_bn │ (None, 32, 32, 128) │ 512 │ conv3_block3_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_2_relu │ (None, 32, 32, 128) │ 0 │ conv3_block3_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_3_conv (Conv2D) │ (None, 32, 32, 512) │ 66,048 │ conv3_block3_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_3_bn │ (None, 32, 32, 512) │ 2,048 │ conv3_block3_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_add (Add) │ (None, 32, 32, 512) │ 0 │ conv3_block2_out[0][0], │ │ │ │ │ conv3_block3_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block3_out (Activation) │ (None, 32, 32, 512) │ 0 │ conv3_block3_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_1_conv (Conv2D) │ (None, 32, 32, 128) │ 65,664 │ conv3_block3_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_1_bn │ (None, 32, 32, 128) │ 512 │ conv3_block4_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_1_relu │ (None, 32, 32, 128) │ 0 │ conv3_block4_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_2_conv (Conv2D) │ (None, 32, 32, 128) │ 147,584 │ conv3_block4_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_2_bn │ (None, 32, 32, 128) │ 512 │ conv3_block4_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_2_relu │ (None, 32, 32, 128) │ 0 │ conv3_block4_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_3_conv (Conv2D) │ (None, 32, 32, 512) │ 66,048 │ conv3_block4_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_3_bn │ (None, 32, 32, 512) │ 2,048 │ conv3_block4_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_add (Add) │ (None, 32, 32, 512) │ 0 │ conv3_block3_out[0][0], │ │ │ │ │ conv3_block4_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv3_block4_out (Activation) │ (None, 32, 32, 512) │ 0 │ conv3_block4_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_1_conv (Conv2D) │ (None, 16, 16, 256) │ 131,328 │ conv3_block4_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block1_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block1_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block1_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block1_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block1_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_0_conv (Conv2D) │ (None, 16, 16, 1024) │ 525,312 │ conv3_block4_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block1_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_0_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block1_0_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block1_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block1_0_bn[0][0], │ │ │ │ │ conv4_block1_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block1_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block1_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_1_conv (Conv2D) │ (None, 16, 16, 256) │ 262,400 │ conv4_block1_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block2_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block2_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block2_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block2_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block2_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block2_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block2_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block1_out[0][0], │ │ │ │ │ conv4_block2_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block2_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block2_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_1_conv (Conv2D) │ (None, 16, 16, 256) │ 262,400 │ conv4_block2_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block3_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block3_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block3_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block3_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block3_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block3_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block3_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block2_out[0][0], │ │ │ │ │ conv4_block3_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block3_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block3_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_1_conv (Conv2D) │ (None, 16, 16, 256) │ 262,400 │ conv4_block3_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block4_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block4_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block4_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block4_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block4_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block4_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block4_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block3_out[0][0], │ │ │ │ │ conv4_block4_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block4_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block4_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_1_conv (Conv2D) │ (None, 16, 16, 256) │ 262,400 │ conv4_block4_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block5_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block5_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block5_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block5_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block5_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block5_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block5_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block4_out[0][0], │ │ │ │ │ conv4_block5_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block5_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block5_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_1_conv (Conv2D) │ (None, 16, 16, 256) │ 262,400 │ conv4_block5_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_1_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block6_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_1_relu │ (None, 16, 16, 256) │ 0 │ conv4_block6_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_2_conv (Conv2D) │ (None, 16, 16, 256) │ 590,080 │ conv4_block6_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_2_bn │ (None, 16, 16, 256) │ 1,024 │ conv4_block6_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_2_relu │ (None, 16, 16, 256) │ 0 │ conv4_block6_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_3_conv (Conv2D) │ (None, 16, 16, 1024) │ 263,168 │ conv4_block6_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_3_bn │ (None, 16, 16, 1024) │ 4,096 │ conv4_block6_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_add (Add) │ (None, 16, 16, 1024) │ 0 │ conv4_block5_out[0][0], │ │ │ │ │ conv4_block6_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv4_block6_out (Activation) │ (None, 16, 16, 1024) │ 0 │ conv4_block6_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_1_conv (Conv2D) │ (None, 8, 8, 512) │ 524,800 │ conv4_block6_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_1_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block1_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_1_relu │ (None, 8, 8, 512) │ 0 │ conv5_block1_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_2_conv (Conv2D) │ (None, 8, 8, 512) │ 2,359,808 │ conv5_block1_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_2_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block1_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_2_relu │ (None, 8, 8, 512) │ 0 │ conv5_block1_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_0_conv (Conv2D) │ (None, 8, 8, 2048) │ 2,099,200 │ conv4_block6_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_3_conv (Conv2D) │ (None, 8, 8, 2048) │ 1,050,624 │ conv5_block1_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_0_bn │ (None, 8, 8, 2048) │ 8,192 │ conv5_block1_0_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_3_bn │ (None, 8, 8, 2048) │ 8,192 │ conv5_block1_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_add (Add) │ (None, 8, 8, 2048) │ 0 │ conv5_block1_0_bn[0][0], │ │ │ │ │ conv5_block1_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block1_out (Activation) │ (None, 8, 8, 2048) │ 0 │ conv5_block1_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_1_conv (Conv2D) │ (None, 8, 8, 512) │ 1,049,088 │ conv5_block1_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_1_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block2_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_1_relu │ (None, 8, 8, 512) │ 0 │ conv5_block2_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_2_conv (Conv2D) │ (None, 8, 8, 512) │ 2,359,808 │ conv5_block2_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_2_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block2_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_2_relu │ (None, 8, 8, 512) │ 0 │ conv5_block2_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_3_conv (Conv2D) │ (None, 8, 8, 2048) │ 1,050,624 │ conv5_block2_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_3_bn │ (None, 8, 8, 2048) │ 8,192 │ conv5_block2_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_add (Add) │ (None, 8, 8, 2048) │ 0 │ conv5_block1_out[0][0], │ │ │ │ │ conv5_block2_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block2_out (Activation) │ (None, 8, 8, 2048) │ 0 │ conv5_block2_add[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_1_conv (Conv2D) │ (None, 8, 8, 512) │ 1,049,088 │ conv5_block2_out[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_1_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block3_1_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_1_relu │ (None, 8, 8, 512) │ 0 │ conv5_block3_1_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_2_conv (Conv2D) │ (None, 8, 8, 512) │ 2,359,808 │ conv5_block3_1_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_2_bn │ (None, 8, 8, 512) │ 2,048 │ conv5_block3_2_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_2_relu │ (None, 8, 8, 512) │ 0 │ conv5_block3_2_bn[0][0] │ │ (Activation) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_3_conv (Conv2D) │ (None, 8, 8, 2048) │ 1,050,624 │ conv5_block3_2_relu[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_3_bn │ (None, 8, 8, 2048) │ 8,192 │ conv5_block3_3_conv[0][0] │ │ (BatchNormalization) │ │ │ │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_add (Add) │ (None, 8, 8, 2048) │ 0 │ conv5_block2_out[0][0], │ │ │ │ │ conv5_block3_3_bn[0][0] │ ├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤ │ conv5_block3_out (Activation) │ (None, 8, 8, 2048) │ 0 │ conv5_block3_add[0][0] │ └───────────────────────────────┴───────────────────────────┴─────────────────┴────────────────────────────┘
Total params: 23,587,712 (89.98 MB)
Trainable params: 23,534,592 (89.78 MB)
Non-trainable params: 53,120 (207.50 KB)
# Implementation
import pandas as pd
# Load CSV files
basepath = 'C:/Users/shikh/Documents/classes/2024/mscbio2025/catsAndDogs/';
train_df = pd.read_csv(basepath+'train.csv')
val_df = pd.read_csv(basepath+'val.csv')
train_df['category'] = train_df['category'].astype(str)
val_df['category'] = val_df['category'].astype(str)
train_df['path'] = train_df['path'].apply(lambda x: basepath + x)
val_df['path'] = val_df['path'].apply(lambda x: basepath + x)
train_df
| path | category | |
|---|---|---|
| 0 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 1 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 2 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 3 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 4 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| ... | ... | ... |
| 270 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 271 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 272 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 273 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 274 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
275 rows × 2 columns
val_df
| path | category | |
|---|---|---|
| 0 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 1 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 2 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 3 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| 4 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 0 |
| ... | ... | ... |
| 65 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 66 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 67 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 68 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
| 69 | C:/Users/shikh/Documents/classes/2024/mscbio20... | 1 |
70 rows × 2 columns
import tensorflow as tf
from tensorflow.keras import layers, models, optimizers, applications
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Image dimensions
img_height, img_width = 256, 256
batch_size = 16
# Data augmentation and preprocessing
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
zoom_range=0.2,
shear_range=0.2,
fill_mode='nearest',
validation_split=0.2
)
val_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_dataframe(
dataframe=train_df,
x_col='path',
y_col='category',
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary',
shuffle=True,
subset='training'
)
Found 220 validated image filenames belonging to 2 classes.
test_generator = train_datagen.flow_from_dataframe(
dataframe = train_df,
x_col='path',
y_col='category',
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary',
shuffle=False,
subset='validation'
)
Found 55 validated image filenames belonging to 2 classes.
validation_generator = val_datagen.flow_from_dataframe(
dataframe=val_df,
x_col='path',
y_col='category',
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary'
)
Found 70 validated image filenames belonging to 2 classes.
# Build the model using transfer learning
base_model = applications.ResNet50(weights='imagenet',
include_top=False, input_shape=(img_height, img_width, 3))
# Freeze the base model layers
for layer in base_model.layers:
layer.trainable = False
model = models.Sequential([
base_model,
layers.GlobalAveragePooling2D(),
layers.Dense(256, activation='relu'),
layers.BatchNormalization(),
layers.Dropout(0.5),
layers.Dense(64, activation='relu'),
layers.BatchNormalization(),
layers.Dropout(0.3),
layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer=optimizers.Adam(learning_rate=1e-5),
loss='binary_crossentropy',
metrics=['accuracy'])
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='accuracy',
patience=10, mode='max', verbose=1)
reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(factor=0.2, patience=3)
import warnings
warnings.filterwarnings("ignore")
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
validation_data=test_generator,
validation_steps=test_generator.samples // batch_size,
epochs=50,
callbacks=[early_stopping, reduce_lr]
)
Epoch 1/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - accuracy: 0.6174 - loss: 0.7876 - val_accuracy: 0.9792 - val_loss: 0.6435 - learning_rate: 1.0000e-05 Epoch 2/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 212ms/step - accuracy: 0.6250 - loss: 0.8728 - val_accuracy: 0.9792 - val_loss: 0.6467 - learning_rate: 1.0000e-05 Epoch 3/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 12s 950ms/step - accuracy: 0.5574 - loss: 0.9241 - val_accuracy: 0.1875 - val_loss: 0.7045 - learning_rate: 1.0000e-05 Epoch 4/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 216ms/step - accuracy: 0.6250 - loss: 1.0713 - val_accuracy: 0.1875 - val_loss: 0.7064 - learning_rate: 1.0000e-05 Epoch 5/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.5535 - loss: 0.8122 - val_accuracy: 0.0000e+00 - val_loss: 0.7551 - learning_rate: 2.0000e-06 Epoch 6/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 209ms/step - accuracy: 0.3750 - loss: 1.1813 - val_accuracy: 0.0000e+00 - val_loss: 0.7601 - learning_rate: 2.0000e-06 Epoch 7/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.5130 - loss: 1.0560 - val_accuracy: 0.0000e+00 - val_loss: 0.8190 - learning_rate: 2.0000e-06 Epoch 8/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 213ms/step - accuracy: 0.5000 - loss: 1.0361 - val_accuracy: 0.0000e+00 - val_loss: 0.8301 - learning_rate: 4.0000e-07 Epoch 9/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.5964 - loss: 0.8932 - val_accuracy: 0.0000e+00 - val_loss: 0.8829 - learning_rate: 4.0000e-07 Epoch 10/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 217ms/step - accuracy: 0.4375 - loss: 0.8884 - val_accuracy: 0.0000e+00 - val_loss: 0.8869 - learning_rate: 4.0000e-07 Epoch 11/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 13s 968ms/step - accuracy: 0.4925 - loss: 0.9516 - val_accuracy: 0.0000e+00 - val_loss: 0.9351 - learning_rate: 8.0000e-08 Epoch 12/50 13/13 ━━━━━━━━━━━━━━━━━━━━ 3s 213ms/step - accuracy: 0.2500 - loss: 1.3853 - val_accuracy: 0.0000e+00 - val_loss: 0.9365 - learning_rate: 8.0000e-08 Epoch 12: early stopping
import matplotlib.pyplot as plt
import pandas as pd
# Visualize training history
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()
test_loss, test_acc = model.evaluate(validation_generator,
steps=validation_generator.samples // batch_size)
print(f'Test accuracy: {test_acc:.4f}')
4/4 ━━━━━━━━━━━━━━━━━━━━ 3s 786ms/step - accuracy: 0.6187 - loss: 0.6586 Test accuracy: 0.6406